package com.situ.stl.config;

import com.situ.stl.interceptor.MemberInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import org.springframework.beans.factory.annotation.Autowired;
import com.situ.stl.interceptor.AdminInterceptor;

@Configuration
public class WebConfig implements WebMvcConfigurer{
	
	@Value("${file.path}")
	private String path;
	
	
	@Autowired
	private AdminInterceptor adminInterceptor;
	@Autowired
	private MemberInterceptor memberInterceptor;

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/upload/**").addResourceLocations("file:"+path);
	}
	
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(adminInterceptor)
			.addPathPatterns("/**")
			.excludePathPatterns(
						"/fore/**",
						"/upload/**",
						"/captcha",
						"/admin/login", "/admin/getLogin",
						"/course",
						"/swagger**/**","/**/api-docs/**");

		registry.addInterceptor(memberInterceptor)
				.addPathPatterns("/fore/**")
				.excludePathPatterns(
						"/fore/course",
						"/fore/member/reg",
						"/fore/member/login"
				);
	}

	@Bean
	public CorsFilter corsFilter() {
		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
		CorsConfiguration corsConfiguration = new CorsConfiguration();
		corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
		corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
		corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
		source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
		return new CorsFilter(source);
	}
}
